home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
2109
/
2109.xpi
/
chrome
/
febe.jar
/
content
/
febeScheduleBackup.js
< prev
next >
Wrap
Text File
|
2009-10-13
|
18KB
|
473 lines
// author: Chuck Baker
// contact: febe@customsoftwareconsult.com
// Version 6.3
var febeBackupInProgress = Boolean(false); // Is a backup currently running?
var febeScheduledBackupID = new Number; // PID of scheduled backup
var febeScheduledWarningID = new Number; // PID of scheduled backup warning
var febeNextBackup = new String(); // Text description of next scheduled backup
var febeSchedule = new String() // Scheduled backup frequency
var febeIsScheduled = Boolean(false) // Is a backup scheduled?
var febeSetTimeoutID = []; // Array holing settimeout ids
var febeDailyHour = new Number; // Hour(00 - 23) of daily backup
var febeDailyMinute = new Number; // Minute (0 - 55) of daily backup, 5 min increments
var febeWeeklyDay = new Number; // Day of week (sun=0 ... sat=6) of daily backup
var febeWeeklyHour = new Number; // Hour(00 - 23) of weekly backup
var febeWeeklyMinute = new Number; // Minute (0 - 55) of weekly backup, 5 min increments
var febeMonthlyDay = new Number; // Day of month (1 - 28) of monthly backup
var febeMonthlyHour = new Number; // Hour(00 - 23) of monthly backup
var febeMonthlyMinute = new Number; // Minute (0 - 55) of monthly backup, 5 min increments
var febeNB = new Date(); // Next backup date
var febeScheduledBuTimer; // nsITimer object
function febeScheduledBuTimerInit(delay){
febeSetMsgs();
if(febeIsScheduled == true){
var prefName = "extensions.febe.schedule.description";
febeNextBackup = febeLocalizedDate(febeNB);
febeSetUnicharPref(prefName,febeNextBackup);
febeSetStatus();
var d = document.getElementById("nextbackupdate");
if(d) d.value= febeLocalizedDate(febeNB);
}else{
document.getElementById("nextbackupdate").value = febeMsg[113];
if(febeScheduledBuTimer) febeScheduledBuTimer.cancel();
return false;
}//if
febeScheduledBuTimer.initWithCallback(febeStartScheduledBackup, delay, Ci.nsITimer.TYPE_ONE_SHOT);
return true;
}//febeScheduledBuTimerInit()
function febeCheckForMissedScheduledBackup(){
if(!febeIsScheduleController){return false} // This window is not the controller
// Was the scheduled backup missed? Test date: Thu Sep 25 2008 21:41:40 GMT-0700 (US Mountain Standard Time)
if(febePrefs.getCharPref("extensions.febe.schedule.frequency") == "none") {return true;} // No backup scheduled
if(febePrefs.getBoolPref("extensions.febe.dontaskagain") == true) {return true;} // Asked and answered
var nextBU = Date.parse(febeNextBackup);
var now = Date.parse(Date());
var prefName = "extensions.febe.lastbackup";
if(isNaN(nextBU)){ // Garbage in lastbackup pref?
if(febePrefs.prefHasUserValue(prefName)){febePrefs.clearUserPref(prefName);}
febeNextBackup = "";
return true;
}//if
if(!febePrefs.prefHasUserValue(prefName)){return true;} // No last backup - must be a new install
var lastBU = Date.parse(febePrefs.getCharPref(prefName));
if(lastBU > nextBU ){ // Scheduled backup already occured (probably in a different window). Reschedule and return
febeScheduleBackup();
return true;
}//if
if(nextBU >= now){return true;} // Scheduled backup was not missed
// Backup was missed! Ask to perform now
if(febeMsg[234] == "undefined") {return false;} // Probably just restarted - it will check again after everything gets loaded
febeSetMsgs();
if(febeBuInProgress()){return false;}
if(febeWin.name == "FEBE Confirm"){return false;} // Already prompting
// Don't ask more than once every 15 minutes - It is possible that the user scheduled a new backup between the last notice and now.
// We also have to allow for the possiblility that the computer is in sleep mode for more that one scheduled backup period.
var now1 = Date();
var now = Date.parse(now1);
if ((now - 900000) < febeSkippedScheduledLastChecked){return true;} // 900,000 milliseconds is 15 minutes
var tmp = "<style>color: red; font-weight: bold; font-size: 15px;</style>"+febeMsg[234]+"\n";
tmp += "<style>color: black; margin: 0px 0px 0px 30px;</style>"+febeMsg[235]+"\n";
tmp += "<style>color: purple; font-weight: bold; margin: 0px 0px 0px 30px;</style>"+febeLocalizedDate(nextBU)+"\n";
tmp += "<style>color: black; margin: 0px 0px 10px 30px;</style>"+febeMsg[236]+"\n";
tmp += "<style>color: black; font-weight: bold; font-size: 15px;</style>"+febeMsg[233]+"\n\n";
tmp += "<style>color: black;</style>"+febeMsg[273]+febePrefs.getCharPref(prefName)+" ("+lastBU+")\n";
tmp += "<style>color: black;</style>"+febeMsg[274]+febeNextBackup+" ("+nextBU+")\n";
tmp += "<style>color: black;</style>"+febeMsg[275]+now1+" ("+now+")\n";
if(febeConfirmAsk(tmp)){
febePrefs.setBoolPref("extensions.febe.backupInProgress",false);
setTimeout('febeInit()',3000);
}//if
febeSkippedScheduledLastChecked = Date.parse(Date());
return true;
}//febeCheckForMissedScheduledBackup()
function febeScheduleBackup(){
if(!Boolean(febeControllerWindow)){febeScheduleController();}
if(!febeSetIsScheduled()){return false;} // No backup is scheduled
if(!febeIsScheduleController){return false} // This window is not the controller
// Determine when (or if) a scheduled backup will take place and put it in the queue
if(febeBuInProgress()){
if(!febeBuInProgressCheck()) {return false;}
}//if
febeSetTimeoutID = [];
if(!febeScheduleInit()){return;}
var now = new Date().getTime(); // Current time in milliseconds
var oneDay = 24 * 60 * 60 * 1000; // One day in milliseconds
var oneMinute = 60 * 1000;
var tmp = new Number;
febeNB = new Date();
febeNB.setSeconds(0);
var d = new Date();
switch(febeSchedule){
case "daily":
febeNB.setHours(febeDailyHour);
febeNB.setMinutes(febeDailyMinute);
febeWait = febeNB.getTime() - now;
if(febeWait <= 0){ // Scheduled time already passed
tmp = febeNB.getTime();
tmp += oneDay; // Add a day
febeNB.setTime(tmp);
febeWait = febeNB.getTime() - now;
}//if
break;
case "weekly":
var today = d.getDay();
tmp = today * oneDay;
d.setTime(now-tmp);
d.setHours(0,0,0); // Last Sunday, Midnight
var sunday = d.getTime();
tmp = febeWeeklyDay * oneDay;
febeNB.setTime(sunday + tmp);
febeNB.setHours(febeWeeklyHour);
febeNB.setMinutes(febeWeeklyMinute);
febeWait = febeNB.getTime() - now;
if(febeWait <= 0){ // Scheduled time already passed
tmp = febeNB.getTime();
tmp += (oneDay * 7);// Add a week
febeNB.setTime(tmp);
febeWait = febeNB.getTime() - now;
}//if
break;
case "monthly":
febeNB.setDate(febeMonthlyDay);
febeNB.setHours(febeMonthlyHour);
febeNB.setMinutes(febeMonthlyMinute);
febeWait = febeNB.getTime() - now;
if(febeWait <= 0){ // Scheduled time already passed
var numDaysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
numDaysInMonth[1] += febeLeapYear(); // Leap year fix
var thisMonth = d.getMonth();
var nextMonth = thisMonth + 1;
if(nextMonth == 12){nextMonth = 0};
var dayOfMonth = d.getDate();
var daysLeftThisMonth = numDaysInMonth[thisMonth] - dayOfMonth;
tmp = (daysLeftThisMonth +1) * oneDay;
febeNB.setTime(now + tmp);
febeNB.setHours(0,0,0); // First day of next month at Midnight
febeNB.setDate(febeMonthlyDay);
febeNB.setHours(febeMonthlyHour);
febeNB.setMinutes(febeMonthlyMinute);
febeWait = febeNB.getTime() - now;
}//if
break;
default:
febeSchedule = "none";
febeIsScheduled = false;
break;
}//switch
febeWait -= oneMinute; // Start the warning one minute prior to backup
febeScheduledBuTimerInit(febeWait);
}//febeScheduleBackup()
function febeStartScheduledBackup(){
if(!febeIsScheduleController) {return true;} // Only the controlling window can initiate a backup
febeWarn();
// Save process id in case user aborts
var to = new febeSetTimeoutObj;
to.PID = setTimeout(febeInit, 60000);
to.Process = 'febeInit()';
febeSetTimeoutID.push(to);
return true;
}//febeStartScheduledBackup()
function febeScheduleInit(){
// Get daily time info
var prefName = "extensions.febe.schedule.daily.hour";
if(febePrefs.prefHasUserValue(prefName)){
febeDailyHour = febePrefs.getIntPref(prefName);
} else {
febePrefs.setIntPref(prefName,1);
febeDailyHour = 1;
}//if
var prefName = "extensions.febe.schedule.daily.minute";
if(febePrefs.prefHasUserValue(prefName)){
febeDailyMinute = febePrefs.getIntPref(prefName);
} else {
febePrefs.setIntPref(prefName,0);
febeDailyMinute = 0;
}//if
// Get weekly time info
var prefName = "extensions.febe.schedule.weekly.day";
if(febePrefs.prefHasUserValue(prefName)){
febeWeeklyDay = febePrefs.getIntPref(prefName);
} else {
febePrefs.setIntPref(prefName,0);
febeWeeklyDay = 0;
}//if
var prefName = "extensions.febe.schedule.weekly.hour";
if(febePrefs.prefHasUserValue(prefName)){
febeWeeklyHour = febePrefs.getIntPref(prefName);
} else {
febePrefs.setIntPref(prefName,1);
febeWeeklyHour = 1;
}//if
var prefName = "extensions.febe.schedule.weekly.minute";
if(febePrefs.prefHasUserValue(prefName)){
febeWeeklyMinute = febePrefs.getIntPref(prefName);
} else {
febePrefs.setIntPref(prefName,0);
febeWeeklyMinute = 0;
}//if
// Get monthly time info
var prefName = "extensions.febe.schedule.monthly.day";
if(febePrefs.prefHasUserValue(prefName)){
febeMonthlyDay = febePrefs.getIntPref(prefName);
} else {
febePrefs.setIntPref(prefName,1);
febeMonthlyDay = 1;
}//if
var prefName = "extensions.febe.schedule.monthly.hour";
if(febePrefs.prefHasUserValue(prefName)){
febeMonthlyHour = febePrefs.getIntPref(prefName);
} else {
febePrefs.setIntPref(prefName,1);
febeMonthlyHour = 1;
}//if
var prefName = "extensions.febe.schedule.monthly.minute";
if(febePrefs.prefHasUserValue(prefName)){
febeMonthlyMinute = febePrefs.getIntPref(prefName);
} else {
febePrefs.setIntPref(prefName,0);
febeMonthlyMinute = 0;
}//if
// Get scheduled backup frequency
var prefName = "extensions.febe.schedule.frequency";
if(febePrefs.prefHasUserValue(prefName)){
febeSchedule = febePrefs.getCharPref(prefName);
} else {
febePrefs.setCharPref(prefName,"none");
febeSchedule = "none";
}//if
febeSetIsScheduled();
febeSetStatus();
return febeIsScheduled;
}//febeScheduleInit()
function febeSetIsScheduled(){
// Set scheduled backup string
var prefName = "extensions.febe.schedule.description";
if(febeGetUnicharPref("extensions.febe.schedule.frequency") == "none"){
febeIsScheduled = false;
febeSchedule = "none";
febeSetUnicharPref(prefName,febeMsg[113]);
febeNextBackup = febeMsg[113];
}else{
febeNextBackup = febeGetUnicharPref(prefName);
febeIsScheduled = true;
}//if;
return febeIsScheduled;
}//febeSetIsScheculed()
function febeScheduleController(){
// Check to see if this is the schedule controlling window
febeIsScheduleController = false;
febeHideIcons = febePrefs.getBoolPref("extensions.febe.hideIcons");
// How many windows are open?
var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
var wincnt = 0;
var winarray = [];
var enumerator = wm.getEnumerator("navigator:browser");
while(enumerator.hasMoreElements()) {
var win = enumerator.getNext();
wincnt++;
winarray[wincnt] = win;
}//while
if(wincnt == 1){ // Only one window (this one) is opened
febeIsScheduleController = true;
febeControllerWindow = window;
febeSetStatus();
winarray = []; // Free up memory
return true;
}//if
// More than one window is open ... see if any are the controller
var contIndex = 0;
for(var i=1; i<=wincnt; i++){
var d = winarray[i].document.getElementById("febestatusbar");
if(winarray[i].febeIsScheduleController){
contIndex = i;
d.hidden = febeHideIcons;
d.collapsed = febeHideIcons;
}else{
winarray[i].febeIsScheduleController = false;
d.hidden = true;
d.collapsed = true;
}//if
}//for
if(contIndex == 0){ // No controller set, make it this one
febeIsScheduleController = true;
document.getElementById("febestatusbar").hidden = febeHideIcons;
document.getElementById("febestatusbar").collapsed = febeHideIcons;
febeControllerWindow = window;
}else{
winarray[contIndex].febeIsScheduleController = true;
winarray[contIndex].document.getElementById("febestatusbar").hidden = febeHideIcons;
winarray[contIndex].document.getElementById("febestatusbar").collapsed = febeHideIcons;
febeControllerWindow = winarray[contIndex];
}//if
winarray = []; // Free up memory
return true;
}//febeScheduleController()
function febeScheduleChange(){
febeScheduleInit();
switch(febeSchedule){
case "daily":
febeDisableDaily(false);
febeDisableWeekly(true);
febeDisableMonthly(true);
febeDisableScheduleInfo(false);
break;
case "weekly":
febeDisableDaily(true);
febeDisableWeekly(false);
febeDisableMonthly(true);
febeDisableScheduleInfo(false);
break;
case "monthly":
febeDisableDaily(true);
febeDisableWeekly(true);
febeDisableMonthly(false);
febeDisableScheduleInfo(false);
break;
case "none":
febeDisableDaily(true);
febeDisableWeekly(true);
febeDisableMonthly(true);
febeDisableScheduleInfo(true);
break;
}//switch
}//febeScheduleChange()
function febeDisableDaily(state){
document.getElementById("dailylabelID").disabled = state;
document.getElementById("dailyHourID").disabled = state;
document.getElementById("dailyMinuteID").disabled = state;
}//febeDisableDaily()
function febeDisableWeekly(state){
document.getElementById("weeklylabelID").disabled = state;
document.getElementById("weeklylabelatID").disabled = state;
document.getElementById("weeklyDayID").disabled = state;
document.getElementById("weeklyHourID").disabled = state;
document.getElementById("weeklyMinuteID").disabled = state;
}//febeDisableWeekly()
function febeDisableMonthly(state){
document.getElementById("monthlylabelID").disabled = state;
document.getElementById("monthlylabelatID").disabled = state;
document.getElementById("monthlyDayID").disabled = state;
document.getElementById("monthlyHourID").disabled = state;
document.getElementById("monthlyMinuteID").disabled = state;
}//febeDisableDaily()
function febeDisableScheduleInfo(state){
//document.getElementById("setschedulebtn").disabled = state;
document.getElementById("setschedulelbl").disabled = state;
document.getElementById("nextbackupdate").disabled = state;
document.getElementById("nextbackupdate").value=febeMsg[113];
}//febeDisableDaily()
function febeSetScheduleBtn(){
febeScheduleInit();
febeScheduleBackup();
febeGetPlatform();
if(febePlatform == 3){// Mac can't handle modal alerts properly, so just assume they clicked "OK"
alert(febeMsg[183]);
febeRestartFx();
}else{
var tmp="<style>color: purple; font-weight: bold; font-size: 15px;</style>"+febeMsg[228];
if(febeConfirm(tmp)){febeRestartFx();}
}//if
return true;
}//febeSetScheduleBtn()
function febeSetStatus(){
// Set statusbar icon
if(febeHideIcons){return true;}
if(!Boolean(febeControllerWindow)){febeScheduleController();}
var d = febeControllerWindow.document.getElementById("febestatusbar");
if(!Boolean(d)){return false;}
febeSetMsgs();
febeSetIsScheduled();
febeLocalizedDate(febeNextBackup);
if(febeIsScheduled){
d.setAttribute("status","normal");
var tmp = febeMsg[114] + febeNextBackup;
}else{
d.setAttribute("status","nobackup");
var tmp = febeMsg[113];
}//if
d.tooltipText = tmp;
return true;
}//febeSetStatus()
function febeLeapYear(){
// returns 1 if now is a leap year, 0 otherwise
var retval = 0;
var now = new Date();
var year = now.getFullYear();
if(year % 4 == 0){
if(year % 100 != 0){
retval = 1;
}else{
if(year % 400 == 0){
retval = 1;
}else{
retval = 0;
}
}
}
return retval;
}//febeLeapYear()
function febeDisplayLastBU(){
febeInitDir();
var febeResultsPage = FEBEdir.clone();
febeResultsPage.append("FEBEresults.html");
var results = false;
if(febeResultsPage.exists()) results = true;
var prefName = "extensions.febe.lastbackup";
if(febePrefs.prefHasUserValue(prefName)){
var tmp = febePrefs.getCharPref(prefName);
tmp = febeLocalizedDate(tmp);
document.getElementById("viewlastbudir").disabled = false;
document.getElementById("viewlastbupage").disabled = !results;
} else {
var tmp = febeMsg[173];
document.getElementById("viewlastbudir").disabled = true;
document.getElementById("viewlastbupage").disabled = true;
}//if
document.getElementById("febeLastBU").value = tmp;
document.getElementById("febeLastBuType").value = febeGetUnicharPref("extensions.febe.lastbackup.Type");
return true;
}//febeDisplayLastBU()
function febeViewLastBUdir(){
var prefName = "extensions.febe.lastbackup.folder";
if(febePrefs.prefHasUserValue(prefName)){
var febeBuDestDir = febePrefs.getCharPref(prefName);
febeOpenLink("file:///"+febeBuDestDir);
}//if
return true;
}//febeViewLastBU()
function febeViewLastBUpage(){
febeOpenLink("chrome://febe/content/febeResultsLoad.html");
return true;
}//febeViewLastBUpage()
//alert("febeScheduleBackup.js");